home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 May / EnigmA AMIGA RUN 18 (1997)(G.R. Edizioni)(IT)[!][issue 1997-05][EAR-CD II].iso / recent2 / cnet_milles.lha / Milles / CNetMilles < prev    next >
Text File  |  1997-04-08  |  60KB  |  1,194 lines

  1. /**************************************************************************\
  2.         $VER: CNetMilles, v1.18 (8-Apr-97) by Dotoran of Frontiers!
  3. \**************************************************************************/
  4. options results;signal on SYNTAX;signal on ERROR;signal on IOERR
  5. a=sourceline(2);parse var a . . ", "ver" ("date")" .;a=random(,,time("s"))
  6. tr=transmit;se=sendstring;gc=getchar;gu=getuser;gs=getscratch;mg=maygetchar
  7. a="rexxsupport.library";if ~show("l",a) then if ~addlib(a,0,-30) then exit
  8. parse source . . fp .;path=left(fp,max(lastpos('/',fp),lastpos(':',fp)))
  9.  
  10. amigascores=0  /* Can the Amiga get a High Hand/Game Score? (1=Y,0=N)   */
  11. breakinF=1     /* Allow Break-In Mode in Human vs Amiga?    (1=Y,0=N)   */
  12.  
  13. qk=0;waitF=0
  14. gu 1302307;arg1=result;gu 1302368;arg2=result;gu 1302429;arg3=result
  15. if arg1="?"|arg1="/"|upper(left(arg1,1))="H" then do
  16.   tr "f1n1cbMille Bornes c9QuickStart cdArgumentsc7: cf(c7Up to cd4 c7may be specifiedcf)n1"
  17.   tr "ce1st - How many PLAYERS in the game to start.n1cf2nd - WHICH player will YOU control in the game."
  18.   tr "ce3rd - The GAME SPEED will be set to this value(between 1 and 200)."
  19.   tr "cf4th - Y or N as to if you'd like control over the PARTNER's hand.n1"
  20.   se "ca   Only the ce1st caargument is cbREQUIRED cato initiate a c9QUICKSTART cagame. "
  21.   se "The cf4th caargument may be specified in lieu of a ce3rd caargument if no "
  22.   tr "preset cdGame Speed cawill be used.n2cdHere are some examplescf:n1"
  23.   tr "ceMIL 3         : Start a 3-Player game QUICKLY(You'll be Player 1)."
  24.   tr "cbMIL 3 2       : Start a 3-Player game where you'll be Player 2."
  25.   tr "ceMIL 4 2 y     : 4-Player game, with you as Player 2 and your partner."
  26.   tr "cbMIL 4 2 1 n   : 4-Player game, with you as Player 2. Game Speed is 1."
  27.   tr "ceMIL 6 3 50 y  : 6-Player game, with you as Player 3 and 6. Speed is 50.n1"
  28.   exit;end
  29. if datatype(arg1,"n")=1&arg1>1&arg1<7&arg1~=5 then do;qk=1
  30.   if arg1>3 then do;gu 1302490;arg4=upper(result);end
  31.   if arg2=""|arg2>arg1 then arg2=1
  32. end  
  33.  
  34. START: /* When a new GAME starts, enter here. */
  35.   changewhere "Milles "ver ; oldwhere=result ; gt.=0
  36.   call SETUP ; call SETUP2 ; gu 1 ; handle=result
  37.   gu 3 ; realname=word(result,1) ; playF.=0 ; lastsaved=0
  38.   if handle=realname then do;handle=handle" 1";realname=realname" 2";end
  39.  
  40.   tr "f1@4z4ce  CNet Mille Bornes, "ver" last updated "date" by Dotoran of Frontiers BBS  z0"
  41.   tr "cb       Mille Bornes c7originally copyrighted in ca1962 c7by ceParker Brothersn1"
  42.  
  43.   do i=1 to 5;game.i="cf"i"cb. c7This cbSaved cdGame Slot c7is c9Emptyc7.";end i
  44.   gu 39;df="mail:users/"result"/_milles";a=0;if exists(df) then do
  45.     do i=1 to 5;a=a+exists(df||i);end i;if a>0 then call RELOADGAME;end
  46.  
  47.   if qk then do ; players=arg1 ; c=arg2
  48.     if index("YN",arg3)>0 then do;arg4=arg3;arg3="";end
  49.     if arg3~="" & arg3>=1 & arg3<=200 then waitF=arg3
  50.     tr "n7cb>7Mille Bornes c9QUICKSTART ce"players"-Player c7game, with cayou c7as player ca"c"c7..."
  51.     if arg1>3 then tr ">ac7In addition, you "word("c9won't cawill",(arg4="Y")+1)" c7be playing your cepartner's c7hand..."
  52.     if arg3=waitF then tr ">ac7The cbGame Speed c7has been capreset c7to cd"waitF" c7as well..."
  53.     playF.c=1 ; name.c=handle ; human=c ; comp=0
  54.     if arg1>3 & arg4="Y" then do
  55.       if players=6 then do;if c<4 then c=c+3;else c=c-3;end
  56.       if players=4 then do;if c<3 then c=c+2;else c=c-2;end
  57.       playF.c=1 ; name.c=realname ; end
  58.     call READHSCORES ; call READGSCORES
  59.     if players<4 | players=6 then wintotal=700 ; else wintotal=1000
  60.     signal START2 ; end
  61.  
  62.   tr "f1@4z4ce  CNet Mille Bornes, "ver" last updated "date" by Dotoran of Frontiers BBS  z0"
  63.   tr "cb       Mille Bornes c7originally copyrighted in ca1962 c7by ceParker Brothersn1"
  64.   call TITLE
  65.   se SHOWTXT("c7View the cbMille Bornes cainstructions c7now? cf[ceNocf]ce: s",8)
  66.   se "u";gc;a=result;if a~="Y" then tr "NoH";else tr "YesH#0"path"CNetMilles.docs}f1"
  67.  
  68.   se "n1c7Want to c9watch c7the ceAmiga c7play against itself? cf[ceNocf]ce: ";gc;a=result
  69.   if a="Y" then do;tr "Yes";comp=1;human=1;end;else do;tr "No";comp=0;fast=0;end
  70.  
  71.   se "n1c7How many ceplayers c7will be caplaying c7today? cf(cb[ce2cb]cf/ce3cf/ce4cf/ce6cf)ce: ";gc;a=result
  72.   if a<2|a>6|a=5 then a=2 ; players=a ; tr players ; call READHSCORES ; call READGSCORES
  73.  
  74.   if comp=0 then do
  75.     se "n1c7Which ceplayer c7would cfYOU c7like to c6control c7today? cf(cb[ce1cb]cf-ce"a"cf)ce: "
  76.     gc ; c=result ; if c<1 | c>a | (c=5 & a<6) then c=1 ; playF.c=1 ; name.c=handle ; human=c ; tr c
  77.   end
  78.  
  79.   else do
  80.     se "n1c7Should we play caSLOW ENOUGH c7for you, a ceHUMANc7, to watch? cf[ceYescf]ce: "
  81.     gc ; fast=(result="N") ; tr word("Yes No",fast+1)
  82.   end
  83.  
  84.   if comp=0 & players>3 then do 
  85.     se "n1c7Would you cbalso c7like to c6control c7your cePARTNER's c7hand as well? cf[ceYescf]ce: "
  86.     gc;a=result;if a="N" then tr "No.";else do;tr "Yes!"
  87.     if players=6 then do;if c<4 then c=c+3;else c=c-3;end
  88.     if players=4 then do;if c<3 then c=c+2;else c=c-2;end
  89.     playF.c=1 ; name.c=realname ; end ; end
  90.  
  91.   if players<4 | players=6 then wintotal=700 ; else wintotal=1000
  92.  
  93.   se "n1c7View the cbHigh c9Hand c7& c9Game cfScores c7for ce"players"-Player cdGamesc7? cf[ceNocf]ce: "
  94.   gc;a=result;if a="Y" then do;tr "Yes";call SHOWHSCORES;call SHOWGSCORES;end;else tr "No."
  95.  
  96.   se SHOWTXT("c7View cePre-Game cbHelp c7screens now? cf[ceNocf]ce: s",8)
  97.   se "u";gc;a=result;if a~="Y" then do;tr "No";signal START2;end;else tr "Yes"
  98.  
  99. if comp=0 & breakinF=0 then signal NOBREAKIN
  100.  
  101.   tr "f1@4z4ce  CNet Mille Bornes, "ver" last updated "date" by Dotoran of Frontiers BBS  z0"
  102.   tr "cb       Mille Bornes c7originally copyrighted in ca1962 c7by ceParker Brothersn1"
  103.  
  104.   tr "cf"center("Hidden Command Mode Options",79)
  105.   tr "cc"center(copies(d2c(196),29),79)"n1"
  106.  
  107.   se "ca   Remember, there are numerous commands available to you while you are "
  108.   se "awaiting your next turn. Simply press one of the following, while an "
  109.   tr "opponent is taking their turn to activate them:n1"
  110.  
  111.   tr "cdQc7. cdAsks if you'd like to Quit (and possibly SAVE) the current game.n1"
  112.  
  113.   tr "cbRc7. cbRedraws the game screen, in the event line noise corrupts the screen.n1"
  114.  
  115.   if comp=0 then do
  116.     se "c9Bc7. c9:2Break-In (Available in `Amiga vs. Human' Games). Allows you to "
  117.     se "swap seats with any other player at the table, to kick out a HUMAN "
  118.     se "controlled partner, to swap WHO your Amiga partner is, or to pick up "
  119.     se "the reins of an Amiga controlled Partner. (Note, however, that use "
  120.     se "of the Break-In options will VOID your ability to obtain a High "
  121.     tr "Score!):0"
  122.   end
  123.  
  124.   if comp=1 then do
  125.     se "c9Bc7. c9:2Break-In (Available in `Amiga vs. Amiga' Games). Allows you to "
  126.     se "`Sit In Place Of' one of the Amiga Players, allowing YOU to pick up "
  127.     se "where the Amiga controlled player left off. If you're watching a team"
  128.     se "game, you'll also be asked if you'd like to `Sit In' the partner's chair,"
  129.     se "in addition to the first chosen chair. (Note, however, that use of the "
  130.     tr "Break-In options will VOID your ability to obtain a High Score!):0"
  131.   end
  132.  
  133.   se SHOWTXT("c7Press cdany key c7to continue...s",3)"ug1"
  134.  
  135. NOBREAKIN:
  136.  
  137.   tr "f1@4z4ce  CNet Mille Bornes, "ver" last updated "date" by Dotoran of Frontiers BBS  z0"
  138.   tr "cb       Mille Bornes c7originally copyrighted in ca1962 c7by ceParker Brothersn1"
  139.   tr "cf"center("Other Command Mode Options",79)
  140.   tr "cc"center(copies(d2c(196),29),79)"n1"
  141.   se "   caTo start a c9QUICKSTART cagame, you can specify up to cd4 arguments caAFTER "
  142.   tr "the cfMIL cacommand, as these examples illustrate:n1"
  143.   tr "ce   MIL 3         : Start a 3-Player game QUICKLY. You'll be Player 1."
  144.   tr "cf   MIL 2 2       : Start a 2-Player game, with you as Player 2."
  145.   tr "ce   MIL 4 2 1     : Start a 4-Player game. You're Player 2, Speed is 1."
  146.   tr "cf   MIL 4 2 1 y   : Same as above, but you'll control the PARTNER as well."
  147.   tr "ce   MIL 6 3 n     : 6-Player game with you as Player 3 and an Amiga Partner."
  148.   tr "cf   MIL 6 2 50 y  : 6-Player game. You'll be Player 2 and 4. Speed=50.n1"
  149.   se "cdOc7. cd:2When `OLM-Waiting' appears in the lower right corner, pressing O will "
  150.   tr "allow you to read/respond to the OLM, then return to your game play!:0n1"
  151.   if comp=0 then do
  152.     se "cbFc7. cb:2When all cards in the Draw Pile have been picked up, you can opt to use "
  153.     tr "the FINISH command to have the hand automatically finished for you.:0n1"
  154.   end
  155.  
  156. START2:
  157.   t="Individual";if players>3 then t="Team"
  158.   se SHOWTXT("caAlright c7to start a ce"players"-Player cd"t" c7game right now? cf[ceYescf]ce: s",9)
  159.   se "u";gc;a=result;call CHECK;if a="N" then do;tr "No";signal AGAIN;end;else tr "Yes"
  160.  
  161. BEGIN: /* When a new HAND starts, enter here. */
  162.   turns=0 ; call CHECK ; call OPENDECK ; call DEAL ; call SCREEN
  163.  
  164. PLAY:
  165.   call TAKECARD ; call DISPLAY ; call CHECK
  166. PLAY1: ; se "2Hce"left(name.player"cd",28,d2c(196))
  167.   if playF.player=0 | comp=1 then signal AMIGAPLAY
  168.   if cardsleft=0 then finT="c7/ceFc6inish";else finT="c0c0c0"
  169.   se SHOWTXT("c7Command? (ce1c7-ce7c7/c9Dc1iscardc7(c9!c7-c9&c7)/cbRc3edrawc7/caSc2peedc7/ceOc6LM"finT"c7/cf[cdQc5uitcf]c7)ce: s",30)
  170.   if comp=0 & breakinF=0 then bufferflush ; se "u";gc;a=result;call CHECK
  171. /* Make sure player doesn't play an empty card slot. */
  172.   if (datatype(a,"n")=1 & a>words(hand.player) & a<8) | index("!@#$%^&",a)>words(hand.player) then do
  173.     se SHOWTXT("c7Yeah, right! I c9don't c7think so sport! Play an cbEXISTING c7card!",5,1);signal PLAY1;end
  174.  
  175. QUIT: ; if index("1234567!@#$%^&0DR*S9O.8F",a)=0 then do
  176.   se SHOWTXT("cdQuit c7playing cbMille Bornes c7now? cf[ceNocf]ce: s",8)
  177.   se "u";gc;a=result;call CHECK;if a~="Y" then do;tr "No";signal PLAY1;end
  178.   else tr "Yes";call SAVE;signal AGAIN;end
  179.  
  180.   if (a="F"|a=8)&cardsleft>0 then signal PLAY1
  181.  
  182.   if a="R" | a="*" then do ; tr "cbRc3edraw" ; call SCREEN ; call DISPLAY ; signal PLAY1 ; end
  183.  
  184.   if a="S" | a=9 then do ; tr "caSc2peed"
  185.     se SHOWTXT("caAdjust cbSpeed c7of game? cf(ce0cf=ceNormalcf, ca1cf=caVery Fastcf, ca200cf=caVery Slowcf, cb[ce"waitF"cb]cf)ce: s",21)
  186.     se "ui4160 3}";gu 70;a=result;if a=""|a<1|a>200 then a=waitF;waitF=a;signal PLAY1;end
  187.  
  188.   if (a="O" | a=".") then do ; tr "ceOc6LM"
  189.     if olm>0 then tr "f1n1@0cbWaiting c7for ceOLMc7..."
  190.       else tr "f1n1@0Create an OLM now...n1& OL}"
  191.     se "n1c7Press cdENTER c7to continue caGAMEce:i1"
  192.     call SCREEN ; call DISPLAY ; signal PLAY1 ; end
  193.  
  194.   if (a="F" | a=8) & cardsleft=0 then do ; tr "Finish"
  195.     se SHOWTXT("c7Have the game cbautomatically c9finish c7this hand now? cf[ceYescf]ce: s",8)
  196.     se "u";gc;a=result;if a="N" then do;tr "No";signal PLAY1;end
  197.     tr "Yes";finish=1;comp=1;fast=1;signal PLAY1;end
  198.  
  199.   if a="D" | a=0 | index("!@#$%^&",a)>0 then do ; tr "c9Dc1iscard"
  200.     if a="D" | a=0 then do
  201.       se SHOWTXT("c9Dc1iscard c7which card from your hand? c7(ce1c7-ce7c7/cf[cbOopscf]c7)ce: s",13)
  202.       se "u";gc;a=result;call CHECK;if a<1|a>7 then do;se "cbOops";signal PLAY1;end;se a;end;else a=index("!@#$%^&",a)
  203.     discard=word(hand.player,a) ; hand.player=delword(hand.player,a,1)
  204.     se SHOWTXT("ce"name.player" c9discards "GROWCARD(discard)" c7card!",3+6)
  205.     signal NEXTPLAYER ; end
  206.  
  207.   cd=word(hand.player,a) ; tr a
  208. /* Player tries to play MILEAGE */
  209.   if datatype(cd,"n")=1 then do
  210.     v1="OG FT AC ST SL" ; v2="GS SP RP RL EL"
  211.     do i=1 to 5 ; c=word(v1,i) ; b=word(v2,i) ; if battle.play="" then b="RL"
  212.       if (i<5 & battle.play=c) | (i=5 & speed.play="SL" & cd>50) then do
  213.         se SHOWTXT("c7Oops, I need to play "GROWCARD(b)" c7card first; sorry!",2+6)
  214.         signal PLAY1;end
  215.     end i
  216.     if battle.play~="RL" & index(safety.play,"RW")=0 then do
  217.       se SHOWTXT("c7Oops, I need to play "GROWCARD("RL")" c7card first; sorry!",2+6)
  218.       signal PLAY1;end
  219.     if cd=200 & pl200.play=2 then do
  220.       se SHOWTXT("c7Darn, I already used cdtwo `cf200 Mc7ile' c7cards towards my cd"wintotal" Mile c7goal.",7)
  221.       signal PLAY1;end
  222.     if total.play+value(cd)>wintotal then do
  223.       se SHOWTXT("c7Darn, I need to play cbEXACTLY cd"wintotal" c7miles to win this hand!",4)
  224.       signal PLAY1;end
  225.     se SHOWTXT("c7Alright, ce"name.player" c7plays "GROWCARD(cd)" c7card towards my cd"wintotal" Mile c7goal!",6+6)
  226.     distance.play=distance.play" "cd ; hand.player=delword(hand.player,a,1)
  227.     total.play=total.play+cd ; if cd=200 then pl200.play=pl200.play+1
  228.     signal NEXTPLAYER
  229.   end
  230. /* Player plays a SAFETY */
  231.   if index("ET PP DA RW",cd)>0 then do
  232.     se SHOWTXT("ce"name.player" c7plays "GROWCARD(cd)" cbSafety c7card now.",4+6)
  233.     safety.play=safety.play' 'cd ; hand.player=delword(hand.player,a,1)
  234.     if cd="ET" & battle.play="OG" then do;battle.play=ob.play;discard="OG";end
  235.     if cd="PP" & battle.play="FT" then do;battle.play=ob.play;discard="FT";end
  236.     if cd="DA" & battle.play="AC" then do;battle.play=ob.play;discard="AC";end
  237.     if cd="RW" & battle.play="ST" then do;battle.play=ob.play;discard="ST";end
  238.     if cd="RW" & speed.play="SL" then do;speed.play=os.play;discard="SL";end
  239.     se SHOWTXT("ce"name.player" c7gets another turn for playing a cbSafety c7card!",4)
  240.     signal PLAY
  241.   end
  242. /* Player plays a ROLL */
  243.   if cd="RL" & (battle.play="" | index("GS SP RP ST",battle.play)>0 &,
  244.      index(safety.play,"RW")=0) then do
  245.       se SHOWTXT("ce"name.player" c7plays "GROWCARD(cd)" c7card! Now play some ceMileage c7cards!",5+6)
  246.       hand.player=delword(hand.player,a,1) ; ob.play=battle.play ; battle.play=cd
  247.       signal NEXTPLAYER
  248.   end
  249. /* Player plays a REMEDY */
  250.   v1=find("GS SP RP RL EL",cd)
  251.   if v1>0 then do
  252.     v2=word("ET PP DA RW RW",v1) ; v3=word("OG FT AC ST SL",v1) ; p=player
  253.     if index(safety.play,v2)>0 then do
  254.       se SHOWTXT("c7You don't need "GROWCARD(cd)" c7with "GROWCARD(v2)" c7safety card!",3+12)
  255.       signal PLAY1 ; end
  256.     if cd="RL" & battle.play="RL" then do
  257.       se SHOWTXT("c7A caRc2oll c7card is already exposed on your c9Battle Pilec7!",6)
  258.       signal PLAY1 ; end
  259.     if battle.play=v3 & cd~="EL" then do
  260.       se SHOWTXT("ce"name.p" c7plays "GROWCARD(cd)" c7card! Play a caRc2oll (caGc2reen) c7card next!",8+6)
  261.       hand.p=delword(hand.p,a,1) ; ob.play=battle.play ; battle.play=cd
  262.       signal NEXTPLAYER ; end
  263.     if speed.play="SL" & cd="EL" then do
  264.       se SHOWTXT("ce"name.p" c7plays "GROWCARD(cd)" c7card! Play ce75c7/ce100c7/ce200 cfMile c7cards now!",10+6)
  265.       hand.p=delword(hand.p,a,1) ; os.play=speed.play ; speed.play=cd
  266.       signal NEXTPLAYER ; end
  267.     se SHOWTXT("c7You have no need for "GROWCARD(cd)" c7card right now!",2+6)
  268.     signal PLAY1
  269.   end
  270. /* Player plays a HAZARD */
  271.   v1="OG FT AC ST SL"
  272.   if index(v1,cd)>0 then do ; pl=0
  273.     if players=2 | players=4 then do
  274.       i=1 ; if play=1 then i=2 ; i2=i ; end
  275.     else do
  276.       se SHOWTXT("c7Play "GROWCARD(cd)" c7card on which player? cf(ce1c7-ce"players"c7/cf[cbOopscf])ce: s",11+6)
  277.       se "u" ; gc ; i=result ; call CHECK
  278.       if i<1 | i>players | (players<6 & i=5) | i=play then do ; tr "Oops!" ; signal PLAY1 ; end
  279.       i2=i ; if players=6 & i2>3 then i2=i-3 ; tr i ; end
  280.     if battle.i2~="RL" & cd~="SL" & (index("GS SP RP",battle.i2)>0 & index(safety.i2,"RW")=0) then do
  281.       se SHOWTXT("c7Sorry, but ce"name.i" c7has to play "GROWCARD("RL")" c7card first!",4+6)
  282.       signal PLAY1;end
  283.     if index("OG FT AC ST",battle.i2)>0 & cd~="SL" then do
  284.       se SHOWTXT("c7Sorry, ce"name.i"'s c9Battle Pile c7has "GROWCARD(battle.i2)" c7card showing!",5+6)
  285.       signal PLAY1;end
  286.     if speed.i2="SL" & cd="SL" then do
  287.       se SHOWTXT("c7Sorry, but ce"name.i" c7is already under a c9Speed Limit c7presently...",5)
  288.       signal PLAY1;end
  289.     v2=word("ET PP DA RW RW",find(v1,cd))
  290.     if index(safety.i2,v2)>0 then do
  291.       se SHOWTXT("c7You c9can'tc7! ce"name.i"'s c7showing "GROWCARD(v2)" c7safety card!",6+6)
  292.       signal PLAY1;end
  293.     if cd~="SL" then do;ob.i2=battle.i2;battle.i2=cd
  294.       se SHOWTXT("ce"name.player" c7plays "GROWCARD(cd)" c7card on ce"name.i"'s c9Battle Pilec7!",6+6);end
  295.     else do;os.i2=speed.i2;speed.i2=cd
  296.       se SHOWTXT("ce"name.player" c7plays "GROWCARD(cd)" c7card on ce"name.i"'s cbSpeed Pilec7!",6+6);end
  297.     hand.player=delword(hand.player,find(hand.player,cd),1)
  298.     if index(hand.i2,v2)>0 then pl=i2
  299.     if players>3 & index(hand.i,v2)>0 then pl=i
  300.     if pl>0 then do;hand.pl=delword(hand.pl,find(hand.pl,v2),1);coup.i2=coup.i2+1
  301.       se SHOWTXT("c7Uh Oh; car1COUP FOURREr0c7! ce"name.pl" c7has "GROWCARD(v2)" c7safety card!",8+6)
  302.       if (v2="RW"&battle.i2="ST")|v2~="RW" then battle.i2=ob.i2
  303.       if v2="RW" & speed.i2="SL" then speed.i2=os.i2
  304.       discard=cd;safety.i2=safety.i2" <"v2">";player=pl;play=i2
  305.       call TAKECARD;se SHOWTXT("c7Controlling play now passes to ce"name.pl"c7!",3)
  306.       signal PLAY;end;signal NEXTPLAYER;end
  307.   end
  308.  signal PLAY
  309.  
  310. SAVE:;if comp=1 then return
  311.   se SHOWTXT("c7Want to cbSAVE c7this game to cecomplete c7later? cf[ceYescf]ce: s",9)
  312.   se "u";gc;a=result;call CHECK;if a="N" then do;tr "No";return;end;else tr "Yes"
  313.   tr "f1@4z4ce  CNet Mille Bornes, "ver" last updated "date" by Dotoran of Frontiers BBS  z0"
  314.   tr "cb       Mille Bornes c7originally copyrighted in ca1962 c7by ceParker Brothersn1"
  315.   se "cbSaved c7games for: ce"handle"c7, "
  316.   if lastsaved>0 then tr "game cdlast cbsaved c7to caSlot cf#c7: ce"lastsaved"c7.n1"
  317.     else tr "this game has c9not yet c7been cbsavedc7.n1";do i=1 to 5;tr game.i;end i
  318.   se "n1cbSave c7to which cdGame Slotc7? cf(ce1cf-ce5cf/cb[c9DON'T SAVEcb]cf)ce: "
  319.   gc;a=result;call CHECK;if a<1|a>5|datatype(a,"n")=0 then do;tr "c9Don't Save";signal AGAIN;end
  320.   else tr a;if index(game.a,"Empty")=0 then do
  321.     se "n1c7This cdSlot c7is c9NOT c7empty. caAlright c7to cbSAVE c7over ceexisting c7game? cf[ceYescf]ce: "
  322.     gc;b=result;if b="N" then do;tr "No";signal SAVE;end;else tr "Yes";end
  323.   se "n1cbSaving c7to cdSlot ce"a"c7..."
  324.   v=date();d=word(v,1)"-"word(v,2)"-"right(word(v,3),2)" @ "time("c")
  325.   t="Individual";if players>3 then t="Team"
  326.   game.a="cf"a"cb. c7A cd"players"-Player c9"t" c7game last cbsaved c7on ca"d"c7.n1   "
  327.   if players<4 then do i=1 to players
  328.     game.a=game.a"c7(ce"i"c7) ce"left(name.i,21) ; end i
  329.   else do i=1 to players%2 ; j=i+2 ; if players=6 then j=i+3 ; t="" ; if i=2 then t="n1   "
  330.     game.a=game.a"c7(ce"i"c7) "left("ce"name.i"c7 and ce"name.j,33+9)" "t ; end i
  331.   call open(f1,df,"w");do i=1 to 5;call writeln(f1,game.i);end i;call close(f1)
  332.   call open(f1,df||a,"w") ; cards="";do i=1 to totcards;cards=cards" "cd.i;end i
  333.     call writeln(f1,ver);call writeln(f1,totcards"|"strip(cards))
  334.     call writeln(f1,card"|"discard"|"comp"|"human"|"wintotal"|"player"|"play"|"players"|"ext"|"turns"|"waitF"|x")
  335.     p=players;if p=4 then p=2;if p=6 then p=3
  336.     do i=1 to p ; call writeln(f1,safety.i"|"distance.i"|"battle.i"|"ob.i"|"speed.i"|"os.i"|"coup.i"|"pl200.i"|"total.i"|"gt.i"|x") ; end i
  337.     do i=1 to players ; call writeln(f1,playF.i"|"name.i"|"cpu.i"|"cpuEXT.i"|"hand.i"|x") ; end i
  338.   call close(f1) ; se "h9h7cbed!"
  339.  signal AGAIN
  340.  
  341. RELOADGAME:
  342.   if save=1 then do;call open(f1,df,"w");do i=1 to 5;call writeln(f1,game.i);end i;call close(f1);save=0;end
  343.   call open(f1,df,"r");do i=1 to 5;game.i=readln(f1);end i;call close(f1)
  344.   tr "f1@4z4ce  CNet Mille Bornes, "ver" last updated "date" by Dotoran of Frontiers BBS  z0"
  345.   tr "cb       Mille Bornes c7originally copyrighted in ca1962 c7by ceParker Brothersn1"
  346.   tr "cbSaved c7games for: ce"handle"n1";do i=1 to 5;tr game.i;end i
  347.   se "n1c7Want to cf<c9Dcf>c9elete c7game, cbResume c7game cf<ce1cf-ce5cf>c7, or cf[caSTART NEWcf]ce: "
  348.   gc;a=result;call CHECK;if index("12345D",a)=0 then do;tr "caStart NEW Game";return;end
  349.   if a="D" then do;tr "c9Delete Game"
  350.     se "n1c9Delete c7which game? cf(ce1cf-ce5cf/cb[ceOopscb]cf)ce: "
  351.     gc;a=result;call CHECK;if a<1|a>5|datatype(a,"n")=0|index(game.a,"Empty")>0 then do
  352.       tr "Oops";signal RELOADGAME;end;else tr "c9Deleting c7game ce"a"c7..."
  353.     address command "delete "df||a
  354.     game.a="cf"a"cb. c7This cbSaved cdGame Slot c7is c9Emptyc7."
  355.     save=1;signal RELOADGAME;end
  356.   if a<1|a>5|datatype(a,"n")=0|index(game.a,"Empty")>0 then do
  357.     tr "Oops";signal RELOADGAME;end ; else se "cbResume c7game ce"a
  358.   call open(f1,df||a,"r") ; vers=readln(f1)
  359.     v=readln(f1) ; parse var v totcards"|"cards
  360.     do i=1 to totcards ; cd.i=word(cards,i) ; end i ; v=readln(f1)
  361.     parse var v card"|"discard"|"comp"|"human"|"wintotal"|"player"|"play"|"players"|"ext"|"turns"|"waitF"|"j
  362.     p=players;if p=4 then p=2;if p=6 then p=3
  363.     do i=1 to p ; v=readln(f1)
  364.       parse var v safety.i"|"distance.i"|"battle.i"|"ob.i"|"speed.i"|"os.i"|",
  365.                   coup.i"|"pl200.i"|"total.i"|"gt.i"|"j
  366.     end i
  367.     do i=1 to players ; v=readln(f1) ; parse var v playF.i"|"name.i"|"cpu.i"|"cpuEXT.i"|"hand.i"|"j ; end i
  368.   call close(f1)  
  369.   call READHSCORES ; call READGSCORES ; lastsaved=a ; ht.=0 ; call SCREEN
  370.   call DISPLAY ; play=player ; if players=4 & player>2 then play=player-2
  371.   if players=6 & player>3 then play=player-3;call CHECKWIN
  372.  signal PLAY1
  373.  
  374. AMIGAPLAY:
  375.   do ap=1 to 7
  376.     if word(cpu.player,ap)=1 then do;call AMIGA1;iterate;end
  377.     if word(cpu.player,ap)=2 then do;call AMIGA2;iterate;end
  378.     if word(cpu.player,ap)=3 then do;call AMIGA3;iterate;end
  379.     if word(cpu.player,ap)=4 then do;call AMIGA4;iterate;end
  380.     if word(cpu.player,ap)=5 then do;call AMIGA5;iterate;end
  381.     if word(cpu.player,ap)=6 then do;call AMIGA6;iterate;end
  382.     if word(cpu.player,ap)=7 then do;call AMIGA7;iterate;end
  383.   end ap
  384.  signal NEXTPLAYER
  385.  
  386. AMIGA1: /* Consolidated Play ROLL Card! */
  387.   if (battle.play="" | index("GS SP RP ST",battle.play)>0) &,
  388.     index(hand.player,"RL")>0 & index(safety.play,"RW")=0 then do
  389.       se SHOWTXT("ce"name.player" c7plays "GROWCARD("RL")" c7card!",3+6)
  390.       hand.player=delword(hand.player,find(hand.player,"RL"),1)
  391.       ob.play=battle.play ; battle.play="RL" ; signal NEXTPLAYER ; end
  392.  return
  393.  
  394. AMIGA2: /* Consolidated Play a Remedy Card! */
  395.   v1="OG FT AC ST SL" ; v2="GS SP RP RL EL"
  396.   do i=1 to 5
  397.     if ( (i<5 & battle.play=word(v1,i)) | (i=5 & speed.play="SL") ) &,
  398.        ( (i<4 & index(hand.player,word(v2,i))>0) |,
  399.          (i=4 & index(hand.player,"RL")>0 & index(safety.play,"RW")=0) |,
  400.          (i=5 & index(hand.player,"EL")>0 & index(safety.play,"RW")=0) ) then do
  401.         se SHOWTXT("ce"name.player" c7plays "GROWCARD(word(v2,i))" c7card!",3+6)
  402.         hand.player=delword(hand.player,find(hand.player,word(v2,i)),1)
  403.         if i<5 then do ; ob.play=battle.play ; battle.play=word(v2,i) ; end
  404.           else do ; os.play=speed.play ; speed.play="EL" ; end
  405.         signal NEXTPLAYER ; end
  406.   end i
  407.  return
  408.  
  409. AMIGA3: /* Consolidated Play Mileage */
  410.   v1="200 100 75 50 25"
  411.   if (index(safety.play,"RW")>0&(index("GS SP RP ST",battle.play)>0|,
  412.      battle.play=""))|battle.play="RL" then do
  413.     do i=1 to 5 ; c=word(v1,i) ; p=player
  414.       b=cpu200.p ; if cpu200.p=1 then b=(random(1,2)=2)
  415.       if (c=200 & (cpu200.b=0 | pl200.play=2)) |,
  416.          (c>50 & speed.play="SL") then iterate i
  417.       if index(hand.p,c)>0 & total.play+c<=wintotal then do
  418.         se SHOWTXT("ce"name.p" c7plays "GROWCARD(c)" c7distance card!",3+6)
  419.         distance.play=distance.play" "c ; total.play=total.play+c
  420.         hand.p=delword(hand.p,find(hand.p,c),1)
  421.         if c=200 then pl200.play=pl200.play+1
  422.         signal NEXTPLAYER
  423.       end
  424.     end i
  425.   end
  426.  return
  427.  
  428. AMIGA4: /* Consolidated Play a Hazard Card */
  429.   hands=2 ; if players=3 | players=6 then hands=3
  430.   v1="OG FT AC ST SL" ; v2="GS SP RP RL EL" ; v3="ET PP DA RW RW"
  431.   do i=1 to 5 
  432.     if index(hand.player,word(v1,i))>0 then do 
  433.       byV=1 ; order=random(1,2) ; lo=word("1 "hands,order)
  434.       hi=word(hands" 1",order)  ; if hi=1 then byV=-1
  435.       do j=lo to hi by byV ; j2=j
  436.         if players=4 then j2=j2+2 ; if players=6 then j2=j2+3
  437.         if j=player | j2=player | index(safety.j,word(v3,i))>0 then iterate j
  438.         if i<5 & battle.j~="RL" then iterate j
  439.         if i=5 & speed.j="SL" then iterate j
  440.         se SHOWTXT("ce"name.player" c7plays "GROWCARD(word(v1,i))" c7card on ce"name.j"c7!",5+6)
  441.         if i<5 then do ; ob.j=battle.j ; battle.j=word(v1,i) ; end
  442.           else do ; os.j=speed.j ; speed.j=word(v1,i) ; end
  443.         hand.player=delword(hand.player,find(hand.player,word(v1,i)),1)
  444.         pl=0 ; if index(hand.j,word(v3,i))>0 then pl=j
  445.         if players>3 & index(hand.j2,word(v3,i))>0 then pl=j2
  446.         if pl>0 then do ; coup.j=coup.j+1
  447.           se SHOWTXT("c7Uh Oh; r1caCOUP FOURREr0c7! ce"name.pl" c7has the "GROWCARD(word(v3,i))" cbSafety Cardc7!",9+6)
  448.           if i<5 & battle.j=word(v1,i) then battle.j=ob.j 
  449.           if i>3 & speed.j="SL" then speed.j=os.j
  450.           discard=word(v1,i) ; safety.j=safety.j" <"word(v3,i)">"
  451.           hand.pl=delword(hand.pl,find(hand.pl,word(v3,i)),1)
  452.           p=pl;if players=4&pl>2 then p=p-2;if players=6&pl>3 then p=p-3
  453.           player=pl ; play=j ; call TAKECARD
  454.           se SHOWTXT("caControlling c7play now passes to ce"name.pl"c7!",4)
  455.           signal PLAY ; end ; signal NEXTPLAYER
  456.       end j
  457.     end
  458.   end i
  459.  return
  460.  
  461. AMIGA5: /* Consolidated Educated Discard */
  462.   v1="EL RL GS SP RP" ; v2="RW RW ET PP DA"
  463.   do i=1 to 5 ; c=word(v1,i) ; b=word(v2,i) ; p=player
  464.     if index(hand.p,c)>0 & index(safety.play,b)>0 then do
  465.       se SHOWTXT("ce"name.p" c9discards "GROWCARD(c)" c7card!",3+6)
  466.       discard=c ; hand.p=delword(hand.p,find(hand.p,c),1)
  467.       signal NEXTPLAYER ; end
  468.   end i ; v1="25 50 75 100 200"
  469.   do i=1 to 5 ; c=word(v1,i) ; p=player
  470.     if index(hand.p,c)=0 |,
  471.        (c=200 & pl200.play<2 & cpu200.play>0) |,
  472.        (speed.play="SL" & c<75) |,
  473.        (total.play+c<=wintotal) then iterate i
  474.     se SHOWTXT("ce"name.p" c9discards "GROWCARD(c)" c7card!",3+6)
  475.     discard=c ; hand.p=delword(hand.p,find(hand.p,c),1)
  476.     signal NEXTPLAYER
  477.   end i ; v1="OG FT AC ST SL"
  478.   do i=1 to 5 ; c=word(v1,i) ; p=player
  479.     if index(hand.p,c)>0 then do
  480.       se SHOWTXT("ce"name.p" c9discards "GROWCARD(c)" c7card!",3+6)
  481.       discard=c ; hand.p=delword(hand.p,find(hand.p,c),1)
  482.       signal NEXTPLAYER ; end
  483.   end i
  484.  return
  485.  
  486. AMIGA6: /* Consolidated Play Safety Card */
  487.   v1="ET PP DA RW RW" ; v2="OG FT AC ST SL"
  488.   do i=1 to 5 ; c=word(v1,i) ; b=word(v2,i) ; p=player
  489.     if index(hand.p,c)>0 then do
  490.       se SHOWTXT("ce"name.p" c7plays "GROWCARD(c)" cbSafety c7card!",4+6)
  491.       safety.play=safety.play" "c;hand.p=delword(hand.p,find(hand.p,c),1)
  492.       if battle.play=b then do;battle.play=ob.play;discard=b;end
  493.       if i>3 & speed.play="SL" then do;speed.play=os.play;discard="SL";end
  494.       se SHOWTXT("ce"name.p" c7gets to take caanother c7turn now!",4)
  495.       signal PLAY ; end
  496.   end i
  497.  return
  498.  
  499. AMIGA7: /* Consolidated Random Discard */
  500.   p=player;if words(hand.p)=0 then return
  501.   cd=word(hand.p,random(1,words(hand.p)))
  502.   se SHOWTXT("ce"name.p" c9discards "GROWCARD(cd)" c7card!",3+6)
  503.   discard=cd ; hand.p=delword(hand.p,find(hand.p,cd),1)
  504.  return
  505.  
  506. TAKECARD:
  507.   if card+1<=totcards then card=card+1 ; else totcards=0
  508.   if totcards>0 then hand.player=hand.player" "cd.card
  509.   a='';do ii=1 to players;a=a' 'hand.ii;end ii
  510.   if words(a)=0 then signal CHECKWIN2
  511.   if words(hand.player)=0 then signal NEXTPLAYER
  512.  return
  513.  
  514. NEXTPLAYER:
  515.   call CHECKWIN ; player=player+1
  516.   if player>players then do ; turns=turns+1 ; player=1 ; end
  517.   play=player ; if players=4 & player>2 then play=player-2
  518.   if players=6 & player>3 then play=player-3
  519.  signal PLAY
  520.  
  521. CHECKWIN:
  522.   if total.play<wintotal then return
  523.   if finish=1 then do;finish=0;comp=0;end
  524.   if total.play=wintotal then do ; call DISPLAY
  525.     tr SHOWTXT("cfAlrightc7, ce"name.player" c7reached the cd"wintotal" Mile c7goal!",6,1) ; end
  526.   if players~=4 & wintotal=700 then do
  527.     if PlayF.player=1 then do
  528.       se SHOWTXT("c7Want to play the cbExtensionc7(to cd1000 Milesc7)? cf[ceNocf]ce: s",9);se "u"
  529.       gc;a=result;call CHECK;if a="Y" then do;tr "Yes!";ext=play;wintotal=1000;return;end
  530.       tr "No." ; signal CHECKWIN2
  531.     end
  532.     if PlayF.player=0 then do
  533.       if cpuEXT.player=2 | (cpuEXT.player=1 & random(1,2)=2) then do
  534.         se SHOWTXT("ce"name.player" c7opts to play the cbExtensionc7!",4,1)
  535.         cpuEXT.player=2;ext=play;wintotal=1000;return;end;else cpuEXT.player=0
  536.       se SHOWTXT("ce"name.player" c7opts c9NOT c7to play the cbExtensionc7!",6,1)
  537.     end
  538.   end
  539. CHECKWIN2:
  540.   if finish=1 then do;finish=0;comp=0;end
  541.   tr "f1@4z4ce  CNet Mille Bornes, "ver" last updated "date" by Dotoran of Frontiers BBS  z0"
  542.   tr bar;p=0;if players>2 & players~=4 then p=1;txt2="On Left Side";if players<4 then txt2="Opponents"
  543.   eq1="cc"copies(d2c(196),19)" "copies(d2c(196),19)" "copies(d2c(196),18)" ";eq2=copies(d2c(196),19)" "
  544.   txt="Player";if players=4|players=6 then txt="  Team"
  545.   se "cf   FINAL STANDINGS           cb"txt" 1           "txt" 2           "
  546.   if p then se txt" 3" ; se "n1"eq1 ; if p then tr eq2 ; else tr
  547.  
  548.   se "cf"right(txt2,18)"  ce"right(name.1,17)"  "right(name.2,17)"  "
  549.   if p then tr right(name.3,17) ; else tr
  550.   if players=4 then tr "cf"right("On Right Side",18)"  ce"right(name.3,17)"  "right(name.4,17)
  551.   if players=6 then tr "cf"right("On Right Side",18)"  ce"right(name.4,17)"  "right(name.5,17)"  "right(name.6,17)
  552.   se eq1 ; if p then tr eq2 ; else tr
  553.  
  554.   ht.1=total.1 ; ht.2=total.2 ; ht.3=total.3
  555.   se "cf Milestones Played   "right(ht.1,16)
  556.   se "   "right(ht.2,16)
  557.   if p then se "   "right(ht.3,16)
  558.  
  559.   a1=words(safety.1)*100 ; a2=words(safety.2)*100 ; a3=words(safety.3)*100
  560.   ht.1=ht.1+a1 ; ht.2=ht.2+a2 ; ht.3=ht.3+a3
  561.   se "n1c7Each Safety Played   "words(safety.1)" x 100 ="right(a1,7)
  562.   se "   "words(safety.2)" x 100 ="right(a2,7)
  563.   if p then se "   "words(safety.3)" x 100 ="right(a3,7)
  564.  
  565.   a1=(words(safety.1)=4)*700;a2=(words(safety.2)=4)*700
  566.   a3=(words(safety.3)=4)*700;ht.1=ht.1+a1;ht.2=ht.2+a2;ht.3=ht.3+a3
  567.   se "n1cf    ALL 4 Safeties   "right(a1,16)
  568.   se "   "right(a2,16)
  569.   if p then se "   "right(a3,16)
  570.  
  571.   a1=coup.1*300 ; a2=coup.2*300 ; a3=coup.3*300
  572.   ht.1=ht.1+a1 ; ht.2=ht.2+a2 ; ht.3=ht.3+a3
  573.   se "n1c7     Coup Fourre's   "coup.1" x 300 ="right(a1,7)
  574.   se "   "coup.2" x 300 ="right(a2,7)
  575.   if p then se "   "coup.2" x 300 ="right(a3,7)
  576.  
  577.   a1=(total.1=wintotal)*400;a2=(total.2=wintotal)*400;a3=(total.3=wintotal)*400
  578.   ht.1=ht.1+a1;ht.2=ht.2+a2;ht.3=ht.3+a3
  579.   se "n1cf    Trip Completed   "right(a1,16)
  580.   se "   "right(a2,16)
  581.   if p then se "   "right(a3,16)
  582.  
  583.   a1=(totcards=0&total.1=wintotal)*300;a2=(totcards=0&total.2=wintotal)*300
  584.   a3=(totcards=0&total.3=wintotal)*300;ht.1=ht.1+a1;ht.2=ht.2+a2;ht.3=ht.3+a3
  585.   se "n1c7    Delayed Action   "right(a1,16)
  586.   se "   "right(a2,16)
  587.   if p then se "   "right(a3,16)
  588.  
  589.   a1=(index(distance.1,"200")=0&total.1=wintotal)*300
  590.   a2=(index(distance.2,"200")=0&total.2=wintotal)*300
  591.   a3=(index(distance.3,"200")=0&total.3=wintotal)*300
  592.   ht.1=ht.1+a1;ht.2=ht.2+a2;ht.3=ht.3+a3
  593.   se "n1cfSafe Trip(No 200s)   "right(a1,16)
  594.   se "   "right(a2,16)
  595.   if p then se "   "right(a3,16)
  596.  
  597.   ex1=0;ex2=0;ex3=0
  598.   if ext=1 then do
  599.     if total.1=1000 then ex1=200;else do;ex2=200;ex3=200;end ; end
  600.   if ext=2 then do
  601.     if total.2=1000 then ex2=200;else do;ex1=200;ex3=200;end ; end
  602.   if ext=3 then do
  603.     if total.3=1000 then ex3=200;else do;ex1=200;ex2=200;end ; end
  604.   ht.1=ht.1+ex1 ; ht.2=ht.2+ex2 ; ht.3=ht.3+ex3
  605.   se "n1c7    Game Extension   "right(ex1,16)
  606.   se "   "right(ex2,16)
  607.   if p then se "   "right(ex3,16)
  608.  
  609.   a1=((total.2+total.3)=0&total.1=wintotal)*500
  610.   a2=((total.1+total.3)=0&total.2=wintotal)*500
  611.   a3=((total.1+total.2)=0&total.3=wintotal)*500
  612.   ht.1=ht.1+a1;ht.2=ht.2+a2;ht.3=ht.3+a3
  613.   se "n1cf   Shut-out Others   "right(a1,16)
  614.   se "   "right(a2,16)
  615.   if p then se "   "right(a3,16)
  616.  
  617.   se "n1cc"eq1 ; if p then se eq2
  618.   se "n1cb        Hand Total   "right(ht.1,16)
  619.   se "   "right(ht.2,16)
  620.   if p then se "   "right(ht.3,16)
  621.  
  622.   pt.1=gt.1;pt.2=gt.2;pt.3=gt.3
  623.   if turns=0 then do;pt.1=gt.1-ht.1;pt.2=gt.2-ht.2;pt.3=gt.3-ht.3;end
  624.   se "n1cd    Previous Total   "right(pt.1,16)
  625.   se "   "right(pt.2,16)
  626.   if p then se "   "right(pt.3,16)
  627.  
  628.   if turns>0 then do
  629.     gt.1=gt.1+ht.1;gt.2=gt.2+ht.2;gt.3=gt.3+ht.3;end
  630.   se "n1ca       Grand Total   "right(gt.1,16)
  631.   se "   "right(gt.2,16)
  632.   if p then tr "   "right(gt.3,16) ; else tr
  633.   tr bar
  634.   a=0 ; if gt.1>a then do ; a=gt.1 ; pl=1 ; end
  635.   if gt.2>a then do ; a=gt.2 ; pl=2 ; end
  636.   if gt.3>a then do ; a=gt.3 ; pl=3 ; end
  637.  
  638.   turns=0 /* Reset `turns' to insure proper END OF HAND/GAME saving. */
  639.  
  640.   z=name.pl;if players=4 then do;p=pl+2;z=z" and "name.p;end
  641.   if players=6 then do;p=pl+3;z=z" and "name.p;end
  642.   if playF.player=1 | (players>3 & playF.p=1) | amigascores=1 then call CHECKHSCORES
  643.   se prompt ; call SHOWHSCORES
  644.  
  645.   if a>=5000 then do
  646.     se SHOWTXT("ce"z" cbWINS c7the game with cd"a" cfTotal Pointsc7!",6,1)
  647.     if lastsaved>0 then do
  648.       se SHOWTXT("c7Want to c9DELETE c7the cbSAVED c7game you just completed? cf[ceNocf]ce: s",9)
  649.       se "u";gc;a=result;if a~="Y" then tr "No";else do;tr "Yes";address command "delete "df||lastsaved
  650.       game.lastsaved="cf"lastsaved"cb. c7This cbSaved cdGame Slot c7is c9Emptyc7."
  651.       call open(f1,df,"w");do i=1 to 5;call writeln(f1,game.i);end i;call close(f1);end;end
  652.     if playF.player=1 | (players>3 & playF.p=1) | amigascores=1 then call CHECKGSCORES
  653.     se prompt ; call SHOWGSCORES
  654.     signal AGAIN ; end
  655.  
  656.   if PlayF.player=1 | comp=0 then do
  657.     se SHOWTXT("c7A game is to cd5000 Pointsc7. Play the cenext c7hand now? cf[ceYescf]ce: s",9)
  658.     se "u";gc;c=result;call CHECK;if c~="N" then do;tr "Yes!";call SETUP
  659.       if players<4|players=6 then wintotal=700;else wintotal=1000
  660.       signal BEGIN;end
  661.     tr "No.";se SHOWTXT("ce"z" c7leaves with the most cfPointsc7: cd"a"c7!",6,1)
  662.     call SAVE
  663.   end
  664.  
  665.   if PlayF.player=0 & comp=1 then do
  666.     if cpuAGN.player=2 | (cpuAGN.player=1 & random(1,2)=2) then do
  667.       se SHOWTXT("ce"name.player" c7wants to caplay c7another hand!",4,1)
  668.       call SETUP;if players<4|players=6 then wintotal=700;else wintotal=1000
  669.       signal BEGIN;end
  670.     se SHOWTXT("ce"name.player" c7does c9NOT c7want to caplay c7another hand!",6,1)
  671.     se SHOWTXT("ce"z" c7leaves with the most cfPointsc7: cd"a"c7!",6,1)
  672.   end
  673.  
  674. AGAIN:
  675.   se SHOWTXT("c7Would you like to cbStart c7another game now? cf[ceNocf]ce: s",7)
  676.   se "u";gc;a=result;call CHECK;if a="Y" then do;tr "Yes";signal START;end
  677.   else tr "No" ; changewhere oldwhere ; logentry "c6Played cbMille Bornesc6, cf"ver"c6!"
  678.  exit
  679.  
  680. SCREEN:;h=human;if players=4 & h>2 then h=h-2
  681.   if players=6 & h>3 then h=h-3;a="SCREEN"h;signal (a)
  682. SCREEN1:;txt="Player";if players=4|players=6 then txt="  Team"
  683.   tr "f1@4z4ce  CNet Mille Bornes, "ver" last updated "date" by Dotoran of Frontiers BBS  z0"
  684.   tr bar;tr "z7c0  "txt"z0cb:0Hz7c0Discardz0cb:"
  685.   tr "z7c4Safetiesz0cb:n2z7c0Distancez0cb:"
  686.   tr "z7c4  Battlez0cb:Cz7c4Speedz0cb:Cz7c4Totalz0cb:Cz7c4Goalz0cb:"
  687.   tr "Cz7c4Turnsz0cb:Cz7c4Cardsz0cb:Cz7c4Gamez0cb:n1z7c0   Hand z0cb:n1"
  688.   tr "Cz7c4 1 z0Cz7 2 z0Cz7 3 z0Cz7 4 z0Cz7 5 z0Cz7 6 z0Cz7 7 z0"
  689.   tr bar;tr "z7c0  "txt"z0cb:n1z7c4Safetiesz0cb:n1z7c0Distancez0cb:"
  690.   tr "z7c4  Battlez0cb:Cz7c4Speedz0cb:Cz7c4Totalz0cb:Cz7c4Gamez0cb:"
  691.   if players=3 | players=6 then do;tr bar
  692.     tr "z7c0  "txt"z0cb:n1z7c4Safetiesz0cb:n1z7c0Distancez0cb:"
  693.     tr "z7c4  Battlez0cb:Cz7c4Speedz0cb:Cz7c4Totalz0cb:Cz7c4Gamez0cb:"
  694.   end ; else do 5 ; tr ; end;tr bar
  695.  return
  696. SCREEN2:;txt="Player";if players=4|players=6 then txt="  Team"
  697.   tr "f1@4z4ce  CNet Mille Bornes, "ver" last updated "date" by Dotoran of Frontiers BBS  z0"
  698.   bar="cd"copies(d2c(196),79);tr bar
  699.   tr "z7c0  "txt"z0cb:n1z7c4Safetiesz0cb:n1z7c0Distancez0cb:"
  700.   tr "z7c4  Battlez0cb:Cz7c4Speedz0cb:Cz7c4Totalz0cb:Cz7c4Gamez0cb:"
  701.   tr bar;tr "z7c0  "txt"z0cb:0Hz7c0Discardz0cb:n1z7c4Safetiesz0cb:n2z7c0Distancez0cb:"
  702.   tr "z7c4  Battlez0cb:Cz7c4Speedz0cb:Cz7c4Totalz0cb:Cz7c4Goalz0cb:"
  703.   tr "Cz7c4Turnsz0cb:Cz7c4Cardsz0cb:Cz7c4Gamez0cb:n1z7c0   Hand z0cb:n1"
  704.   tr "Cz7c4 1 z0Cz7 2 z0Cz7 3 z0Cz7 4 z0Cz7 5 z0Cz7 6 z0Cz7 7 z0"
  705.   if players=3 | players=6 then do;tr bar
  706.     tr "z7c0  "txt"z0cb:n1z7c4Safetiesz0cb:n1z7c0Distancez0cb:"
  707.     tr "z7c4  Battlez0cb:Cz7c4Speedz0cb:Cz7c4Totalz0cb:Cz7c4Gamez0cb:"
  708.   end ; else do 5 ; tr ; end;tr bar
  709.  return
  710. SCREEN3:;txt="Player";if players=4|players=6 then txt="  Team"
  711.   tr "f1@4z4ce  CNet Mille Bornes, "ver" last updated "date" by Dotoran of Frontiers BBS  z0"
  712.   bar="cd"copies(d2c(196),79);tr bar
  713.   tr "z7c0  "txt"z0cb:n1z7c4Safetiesz0cb:n1z7c0Distancez0cb:"
  714.   tr "z7c4  Battlez0cb:Cz7c4Speedz0cb:Cz7c4Totalz0cb:Cz7c4Gamez0cb:"
  715.   tr bar;tr "z7c0  "txt"z0cb:n1z7c4Safetiesz0cb:n1z7c0Distancez0cb:"
  716.   tr "z7c4  Battlez0cb:Cz7c4Speedz0cb:Cz7c4Totalz0cb:Cz7c4Gamez0cb:"
  717.   tr bar;tr "z7c0  "txt"z0cb:50Hz7c0Discardz0cb:"
  718.   tr "z7c4Safetiesz0cb:n2z7c0Distancez0cb:"
  719.   tr "z7c4  Battlez0cb:Cz7c4Speedz0cb:Cz7c4Totalz0cb:Cz7c4Goalz0cb:"
  720.   tr "Cz7c4Turnsz0cb:Cz7c4Cardsz0cb:Cz7c4Gamez0cb:n1z7c0   Hand z0cb:n1"
  721.   tr "Cz7c4 1 z0Cz7 2 z0Cz7 3 z0Cz7 4 z0Cz7 5 z0Cz7 6 z0Cz7 7 z0";tr bar
  722.  return
  723.  
  724. DISPLAY:;h=human;if players=4 & h>2 then h=h-2
  725.   if players=6 & h>3 then h=h-3;a="DISPLAY"h
  726.   cardsleft=left(totcards-card,3);if cardsleft<0 then cardsleft=0
  727.  signal (a)
  728. DISPLAY1:
  729.   hd="c7(cb1c7) ce"name.1;if players=4 then hd=hd" ca& c7(cb3c7) ce"name.3
  730.   if players=6 then hd=hd" ca& c7(cb4c7) ce"name.4
  731.   tr "1Hce"hd"9H"GROWCARD(discard,1)""
  732.   if words(safety.1)>0 then do
  733.     do i=1 to words(safety.1) ; call BIGCARD(word(safety.1,i))
  734.       tr ""i*12-2"H"cd1 ; tr ""i*12-2"H"cd2
  735.     end i
  736.   end
  737.   if words(distance.1)>0 then do ; se "1H"
  738.     do i=1 to words(distance.1)
  739.       if i>1 then se "cb, " ; se "cf"word(distance.1,i)
  740.     end i ; tr
  741.   end
  742.   se "1H"GROWCARD(battle.1,1)"4H"GROWCARD(speed.1,1)
  743.   tr "9Hcf"total.1"5Hcd"left(wintotal,4)
  744.   hd1="" ; hd2="" ; pl=1
  745.   if players=4 & ((playF.3=1 & player>2) | playF.1=0) then pl=3
  746.   if players=6 & ((playF.4=1 & player>3) | playF.1=0) then pl=4
  747.   tr "Hce"left(name.pl"'s",25)"4Hcd"turns
  748.   tr "9Hca"cardsleft"5Hce"gt.1
  749.   do i=1 to words(hand.pl) ; call BIGCARD(word(hand.pl,i))
  750.     hd1=hd1||cd1" " ; hd2=hd2||cd2" "
  751.   end i ; se "0H"hd1"" ; se "10H"hd2""
  752.  
  753.   hd="c7(cb2c7) ce"name.2;if players=4 then hd=hd" ca& c7(cb4c7) ce"name.4
  754.   if players=6 then hd=hd" ca& c7(cb5c7) ce"name.5
  755.   tr "11Hce"hd
  756.   if words(safety.2)>0 then do ; se "11H"
  757.     do i=1 to words(safety.2)
  758.       if i>1 then se "cb, " ; se strip(GROWCARD(word(safety.2,i),1))
  759.     end i ; tr
  760.   end
  761.   if words(distance.2)>0 then do ; se "11H"
  762.     do i=1 to words(distance.2)
  763.       if i>1 then se "cb, " ; se "cf"word(distance.2,i)
  764.     end i ; tr
  765.   end
  766.   tr "11H"GROWCARD(battle.2,1)"34H"GROWCARD(speed.2,1)
  767.   tr "59Hcf"total.2"75Hce"gt.2
  768.  
  769.   if players=3 | players=6 then do
  770.     hd="c7(cb3c7) ce"name.3;if players=6 then hd=hd" ca& c7(cb6c7) ce"name.6
  771.     tr "11Hce"hd
  772.     if words(safety.3)>0 then do ; se "11H"
  773.       do i=1 to words(safety.3)
  774.         if i>1 then se "cb, " ; se strip(GROWCARD(word(safety.3,i),1))
  775.       end i ; tr
  776.     end
  777.     if words(distance.3)>0 then do ; se "11H"
  778.       do i=1 to words(distance.3)
  779.         if i>1 then se "cb, " ; se "cf"word(distance.3,i)
  780.       end i ; tr
  781.     end
  782.     tr "11H"GROWCARD(battle.3,1)"34H"GROWCARD(speed.3,1)
  783.     tr "59Hcf"total.3"75Hce"gt.3
  784.   end;call SHOWOLM
  785.  return
  786.  
  787. DISPLAY2:
  788.   hd="c7(cb1c7) ce"name.1;if players=4 then hd=hd" ca& c7(cb3c7) ce"name.3
  789.   if players=6 then hd=hd" ca& c7(cb4c7) ce"name.4 ; tr "1Hce"hd
  790.   if words(safety.1)>0 then do ; se "1H"
  791.     do i=1 to words(safety.1)
  792.       if i>1 then se "cb, " ; se strip(GROWCARD(word(safety.1,i),1))
  793.     end i ; tr
  794.   end
  795.   if words(distance.1)>0 then do ; se "1H"
  796.     do i=1 to words(distance.1)
  797.       if i>1 then se "cb, " ; se "cf"word(distance.1,i)
  798.     end i ; tr
  799.   end
  800.   se "1H"GROWCARD(battle.1,1)"4H"GROWCARD(speed.1,1)
  801.   tr "9Hcf"total.1"5Hce"gt.1
  802.  
  803.   hd="c7(cb2c7) ce"name.2;if players=4 then hd=hd" ca& c7(cb4c7) ce"name.4
  804.   if players=6 then hd=hd" ca& c7(cb5c7) ce"name.5
  805.   tr "1Hce"hd"9H"GROWCARD(discard,1)""
  806.   if words(safety.2)>0 then do
  807.     do i=1 to words(safety.2) ; call BIGCARD(word(safety.2,i))
  808.       tr ""i*12-2"H"cd1 ; tr ""i*12-2"H"cd2
  809.     end i
  810.   end
  811.   if words(distance.2)>0 then do ; se "11H"
  812.     do i=1 to words(distance.2)
  813.       if i>1 then se "cb, " ; se "cf"word(distance.2,i)
  814.     end i ; tr
  815.   end
  816.   tr "11H"GROWCARD(battle.2,1)"34H"GROWCARD(speed.2,1)
  817.   tr "59Hcf"total.2"75Hcd"left(wintotal,4)
  818.   hd1="" ; hd2="" ; pl=2
  819.   if players=4 & ((playF.4=1 & player>2) | playF.2=0) then pl=4
  820.   if players=6 & ((playF.5=1 & player>3) | playF.2=0) then pl=5
  821.   tr "1Hce"left(name.pl"'s",25)"34Hcd"turns
  822.   tr "59Hca"cardsleft"75Hce"gt.2
  823.   do i=1 to words(hand.pl) ; call BIGCARD(word(hand.pl,i))
  824.     hd1=hd1||cd1" " ; hd2=hd2||cd2" "
  825.   end i ; se "10H"hd1"" ; se "10H"hd2""
  826.  
  827.   if players=3 | players=6 then do
  828.     hd="c7(cb3c7) ce"name.3;if players=6 then hd=hd" ca& c7(cb6c7) ce"name.6
  829.     tr "11Hce"hd
  830.     if words(safety.3)>0 then do ; se "11H"
  831.       do i=1 to words(safety.3)
  832.         if i>1 then se "cb, " ; se strip(GROWCARD(word(safety.3,i),1))
  833.       end i ; tr
  834.     end
  835.     if words(distance.3)>0 then do ; se "11H"
  836.       do i=1 to words(distance.3)
  837.         if i>1 then se "cb, " ; se "cf"word(distance.3,i)
  838.       end i ; tr
  839.     end
  840.     tr "11H"GROWCARD(battle.3,1)"34H"GROWCARD(speed.3,1)
  841.     tr "59Hcf"total.3"75Hce"gt.3
  842.   end;call SHOWOLM
  843.  return
  844.  
  845. DISPLAY3:
  846.   hd="c7(cb1c7) ce"name.1 ; if players=6 then hd=hd" ca& c7(cb4c7) ce"name.4 ; tr "1Hce"hd
  847.   if words(safety.1)>0 then do ; se "1H"
  848.     do i=1 to words(safety.1)
  849.       if i>1 then se "cb, " ; se strip(GROWCARD(word(safety.1,i),1))
  850.     end i ; tr
  851.   end
  852.   if words(distance.1)>0 then do ; se "1H"
  853.     do i=1 to words(distance.1)
  854.       if i>1 then se "cb, " ; se "cf"word(distance.1,i)
  855.     end i ; tr
  856.   end
  857.   se "1H"GROWCARD(battle.1,1)"4H"GROWCARD(speed.1,1)
  858.   tr "9Hcf"total.1"5Hce"gt.1
  859.  
  860.   hd="c7(cb2c7) ce"name.2 ; if players=6 then hd=hd" ca& c7(cb5c7) ce"name.5 ; tr "1Hce"hd
  861.   if words(safety.2)>0 then do ; se "1H"
  862.     do i=1 to words(safety.2)
  863.       if i>1 then se "cb, " ; se strip(GROWCARD(word(safety.2,i),1))
  864.     end i ; tr
  865.   end
  866.   if words(distance.2)>0 then do ; se "11H"
  867.     do i=1 to words(distance.2)
  868.       if i>1 then se "cb, " ; se "cf"word(distance.2,i)
  869.     end i ; tr
  870.   end
  871.   tr "11H"GROWCARD(battle.2,1)"34H"GROWCARD(speed.2,1)
  872.   tr "59Hcf"total.2"75Hce"gt.2
  873.  
  874.   hd="c7(cb3c7) ce"name.3;if players=6 then hd=hd" ca& c7(cb6c7) ce"name.6
  875.   tr "11Hce"hd"59H"GROWCARD(discard,1)""
  876.   if words(safety.3)>0 then do
  877.     do i=1 to words(safety.3) ; call BIGCARD(word(safety.3,i))
  878.       tr ""i*12-2"H"cd1 ; tr ""i*12-2"H"cd2
  879.     end i
  880.   end
  881.   if words(distance.3)>0 then do ; se "11H"
  882.     do i=1 to words(distance.3)
  883.       if i>1 then se "cb, " ; se "cf"word(distance.3,i)
  884.     end i ; tr
  885.   end
  886.   tr "11H"GROWCARD(battle.3,1)"34H"GROWCARD(speed.3,1)
  887.   tr "59Hcf"total.3"75Hcd"left(wintotal,4)
  888.   hd1="" ; hd2="" ; pl=3
  889.   if players=6 & ((playF.6=1 & player>3) | playF.3=0) then pl=6
  890.   tr "1Hce"left(name.pl"'s",25)"34Hcd"turns
  891.   tr "59Hca"cardsleft"75Hce"gt.3
  892.   do i=1 to words(hand.pl) ; call BIGCARD(word(hand.pl,i))
  893.     hd1=hd1||cd1" " ; hd2=hd2||cd2" "
  894.   end i ; se "10H"hd1"" ; se "10H"hd2"" ; call SHOWOLM
  895.  return
  896.  
  897. SHOWTXT:;aa=Arg(1);cc=Arg(2);zy=(right(aa,3)="s")
  898.   wait=1 ; if ~fast then wait=((length(aa)-cc*3)*2)%1
  899.   if waitF>0 & Arg(3)="" then wait=waitF
  900.   se "1Hc7"center(aa,79+cc*3);if zy then return ""
  901.   if comp=0 & breakinF=0 then return ""
  902.   do wait;mg;k=result
  903.     if k="q" | k="8" | k="9" then do ; a="" ; signal QUIT ; end
  904.     if k="r" | k="*" then do ; call SCREEN ; call DISPLAY ; end
  905.     if (k="b" | k=".") & comp=0 & playF.player=0 & finish=0 then signal BREAKIN2
  906.     if (k="b" | k=".") & comp=1 then signal BREAKIN
  907.   end
  908.  return ""
  909.  
  910. SHOWOLM:
  911.   gu 1101743;olm=result;if olm=olmO then return
  912.   if olm=0 then se "68Hcd"copies(d2c(196),11)
  913.     else se "68HcfOLMcd"d2c(196)"cfWaiting"
  914.  return
  915.  
  916. BREAKIN:;call CHECK
  917.   se SHOWTXT("cbBreakIn c7Options: cf<cdQcf>cduit c7game, cf<caScf>cait-Inc7, cf[cbRESUMEcf]ce: s",16)
  918.   se "u";gc;k=result;if k="Q" then do;tr "cdQuit";a="";signal QUIT;end
  919.   if k~="S" then do;tr "cbResume";return "";end;else tr "caSit-In"
  920.   se SHOWTXT("caSit-In c7place of which ceAmiga Playerc7? cf(ce1cf-ce"players"cf/cb[ceOopscb]cf)ce: s",14)
  921.   se "u";gc;a=result;if a<1|a>players|datatype(a,"n")=0 then do
  922.     tr "Oops";return "";end;else tr a
  923.   se SHOWTXT("ce"handle" c7now cbsitting in c7for ce"name.a"c7!",6,1)
  924.   comp=0;human=a;playF.a=1;name.a=handle;breakin=1
  925.   if players=4 | players=6 then do
  926.     se SHOWTXT("c7Want to caSit-In c7on the cePartner c7as well? cf[ceNocf]ce: s",9)
  927.     se "u";gc;b=result;if b="Y" then do;tr "Yes"
  928.       if players=6 then do;if a<4 then a=a+3;else a=a-3;end
  929.       if players=4 then do;if a<3 then a=a+2;else a=a-2;end
  930.       playF.a=1;name.a=word(realname,1);end;else tr "No."
  931.   end;call SCREEN;call DISPLAY
  932.  return ""
  933.  
  934. BREAKIN2:;call CHECK
  935.   if players<4 then se SHOWTXT("cbBreakIn c7Option: cf<caScf>cawap c7Chairs or cf[cbRESUMEcf]ce: s",11)
  936.     else se SHOWTXT("cbBreakInc7: cf<caScf>cawap c7Chairs, cf<ceTcf>ceakec7, cf<c9Kcf>c9ickc7, or cf<cdPcf>cdlay c7Partner, cf[cbRESUMEcf]ce: s",26)
  937.   se "u";gc;k=result
  938.   if k~="S" then if players<4 & index("TKP",k)>0 then do;tr "cbResume";return "";end
  939.   if k="S" then do;tr "caSwap"
  940.     if players>2 then do
  941.       se SHOWTXT("ce"name.human"c7, move from chair ca"human" c7to which chair? cf(ce1c7-ce"players"c7/cf[cbOopscf])ce: s",13)
  942.       se "u";gc;a1=result;tr a1
  943.       if a1<1|a1>players|(players=6&a1=5)|a1=human|datatype(a1,"n")=0 then do;tr "cbOops";return "";end
  944.     end;else do;a1=1;if human=1 then a1=2;end;pa=0
  945.     if players=4 then do
  946.       p=human+2;if human>2 then p=human-2
  947.       if playF.p=1 then do;pa=1
  948.         aa=a1+2;if a1>2 then aa=a1-2;end ; end
  949.     if players=6 then do
  950.       p=human+3;if human>3 then p=human-3
  951.       if playF.p=1 then do;pa=1
  952.         aa=a1+3;if a1>3 then aa=a1-3;end ; end
  953.     playF.a1=1 ; playF.human=0 ; n=name.a1 
  954.     name.a1=name.human ; name.human=n
  955.     cpu=cpu.a1;cpu.a1=cpu.human;cpu.human=cpu
  956.     cpus=translate(cpus,"X",a1);cpus=translate(cpus,"Y",human)
  957.     cpus=translate(cpus,a1,"Y");cpus=translate(cpus,human,"X")
  958.     if pa then do ; playF.aa=1 ; playF.p=0
  959.       n=name.aa ; name.aa=name.p ; name.p=n 
  960.       cpu=cpu.aa;cpu.aa=cpu.p;cpu.p=cpu
  961.       cpus=translate(cpus,"X",aa);cpus=translate(cpus,"Y",p)
  962.       cpus=translate(cpus,aa,"Y");cpus=translate(cpus,p,"X") ; end
  963.     human=a1 ; breakin=1 ; call SCREEN ; return "" ; end
  964.   if players=4 then do;a1=human+2;if human>2 then a1=human-2;end
  965.     else do;a1=human+3;if human>3 then a1=human-3;end
  966.   if k="T" then do;tr "ceTake"
  967.     if playF.a1=1 then do
  968.       se SHOWTXT("c7You have to c9KICK c7your ceHUMAN c7partner out of the game first!",5,1)
  969.       return "" ; end
  970.     se SHOWTXT("ce"name.human"c7, take which player as your new caPartnerc7? cf(ce1c7-ce"players"c7/cf[cbOopscf])ce: s",13)
  971.     se "u";gc;b=result
  972.     if b<1|b>players|(players=6&b=5)|b=human|b=a1 then do;tr "cbOops";return "";end
  973.     tr b;se SHOWTXT("Take "name.b" as your new partner? [Yes]: s",0)
  974.     se "u";gc;c=result;if c="N" then do;tr "No";return "";end;else tr "Yes"
  975.     name=name.a1;name.a1=name.b;name.b=name;breakin=1
  976.     cpus=translate(cpus,"X",a1);cpus=translate(cpus,"Y",b)
  977.     cpus=translate(cpus,a1,"Y");cpus=translate(cpus,b,"X")
  978.     cpu=cpu.a1;cpu.a1=cpu.b;cpu.b=cpu;call SCREEN;return ""
  979.   end
  980.   if k="K" then do;tr "c9Kick"
  981.     if playF.a1=0 then do
  982.       se SHOWTXT("c7Your partner isn't caHUMANc7, and we c9BOOT c7the ceAmigac7; we don't c9Kick c7it!",9,1)
  983.       return "" ; end
  984.     se SHOWTXT("ce"name.human"c7, you want to c9KICK c7your caPartner c7out of the game? cf[ceNocf]ce: s",10)
  985.     se "u";gc;b=result;if b~="Y" then do;tr "No";return "";end;else tr "Yes"
  986.     playF.a1=0;parse var cp.a1 name.a1"|"j;breakin=1;call SCREEN;return ""
  987.   end
  988.   if k="P" then do;tr "cdPlay"
  989.     if playF.a1=1 then do
  990.       se SHOWTXT("c7You're already playing your caPartner's c7seat as well as your own!",3,1)
  991.       return "" ; end
  992.     se SHOWTXT("ce"name.human"c7, you want to cbPLAY c7your caPartner's c7hand as well? cf[ceNocf]ce: s",10)
  993.     se "u";gc;b=result;if b~="Y" then do;tr "No";return "";end;else tr "Yes"
  994.     playF.a1=1;gu 3;name.a1=word(result,1);breakin=1;call SCREEN;return ""
  995.   end
  996.  return ""
  997.  
  998. GROWCARD:
  999.   aa=Arg(1);ab=Arg();cp=0;if left(aa,1)="<" then do;cp=1;parse var aa "<"aa">";end
  1000.   if datatype(aa,"n")=1 & ab=1 then return "c7a cb`"strip(left("cf"aa" cfMc7ile",15+3*3))"cb'"
  1001.   if datatype(aa,"n")=1 & ab=2 then return left("cfcf"aa" cfMc7ile cfCc7ard",15+6*3)
  1002.   if aa="" then return "               " ; else ac=find(gc1,aa)
  1003.   an="c7a `";if index("OG AC RP EL",aa)>0 then an="c7an `"
  1004.   if index("ET PP DA RW",aa)>0 then an="c7the `"
  1005.   aa=left(translate(word(gc2,ac)," ","_"),15+4*3)
  1006.   if cp then aa="cd>"strip(aa)"cd<";if ab=1 then aa=an||strip(aa)"c7'"
  1007.  return aa
  1008.  
  1009. BIGCARD:
  1010.   aa=Arg(1);cp=0;if left(aa,1)="<" then do;cp=1;parse var aa "<"aa">";end
  1011.   if datatype(aa,"n")=1 then do
  1012.     co=0;if aa>50 then co=1;if aa>100 then co=4
  1013.     cd1="z6c"co"   "left(aa,3)"   z0"
  1014.     cd2="z6c"co"  Miles  z0";return;end
  1015.   if aa="" then do;cd1="";cd2="";return;end
  1016.   aa=find(gc1,aa)
  1017.   cd1=translate(word(gc3,aa)," ","_")
  1018.   cd2=translate(word(gc4,aa)," ","_")
  1019.   if cp then do
  1020.     cd1="cd>"cd1"cd<" ; cd2="cd>"cd2"cd<" ; end
  1021.  return
  1022.  
  1023. DEAL:
  1024.   do i=1 to 6
  1025.     do j=1 to players
  1026.       a=i+(j*6)-6
  1027.       hand.j=hand.j' 'cd.a
  1028.     end j
  1029.   end i
  1030.   card=(players*6)
  1031.  return
  1032.  
  1033. OPENDECK:
  1034.   a=cards1 ; if players<4 then a=cards2 ; totcards=words(a)
  1035.   do i=1 to totcards ; cd.i=word(a,i) ; end i
  1036. SHUFFLEDECK:
  1037.   a2=totcards%2 ; se "1HC"
  1038.   do i=1 to 4 ; se "cbShufflec7, "
  1039.     do j=1 to 50
  1040.       v1=random(1,a2) ; v2=random(a2+1,totcards)
  1041.       a=cd.v1 ; cd.v1=cd.v2 ; cd.v2=a
  1042.     end j ; se "caCutc7, "
  1043.     do j=1 to a2 ; a1=a2+1
  1044.       a=cd.j ; cd.j=cd.a1 ; cd.a1=a
  1045.     end j
  1046.   end i ; tr "cdReadyc7!"
  1047.  return
  1048.  
  1049. SETUP:
  1050.   hand.="" ; battle.="" ; speed.="" ; fast=0 ; save=0
  1051.   distance.="" ; safety.="" ; total.=0 ; discard="" ; play=1 ; pl200.=0
  1052.   player=1 ; coup.=0 ; ht.=0 ; ext=0 ; finish=0 ; bar="cd"copies(d2c(196),79) 
  1053.   prompt="n1"center("ce<c7Tap cdANY KEY c7Nowce>g1n1",79+3*7)
  1054.  
  1055.   gc1="OG FT AC SL ST GS SP RP EL RL ET PP DA RW" ; breakin=0 ; os.="" ; ob.=""
  1056.  
  1057.   gc2="c9Oc1ut_of_c9Gc1as c9Fc1lat_c9Tc1ire c9Ac1uto_c9Ac1ccident "
  1058.   gc2=gc2"c9Sc1peed_c9Lc1imit c9Sc1top_(c9Rc1ed) ceSccome_ceGccasoline "
  1059.   gc2=gc2"ceSccpare_ceTccire ceAccuto_ceRccepairs ceEccnd_of_ceLccimit "
  1060.   gc2=gc2"caRc2oll_(caGc2reen) caEc2xtra_caTc2ank caPc2uncture_caPc2roof "
  1061.   gc2=gc2"caDc2riving_caAc2ce caRc2ight_of_caWc2ay"
  1062.  
  1063.   gc3="z1cf_Out_Of__z0 z1cf__Flat___z0 z1cf___Auto__z0 z1ce__Speed__z0 z1cf__Stop___z0 "
  1064.   gc3=gc3"z4cb__Some___z0 z4cb__Spare__z0 z4cb__Auto___z0 z4ce_End__Of_z0 z4ca__Roll___z0 "
  1065.   gc3=gc3"z2cb_Extra___z0 z2cbPuncture_z0 z2cb_Driving_z0 z2cb__Right__z0"
  1066.  
  1067.   gc4="z1cf___Gas___z0 z1cf___Tire__z0 z1cf_Accidentz0 z1ce__Limit__z0 z1cf__(Red)__z0 "
  1068.   gc4=gc4"z4cbGasoline_z0 z4cb___Tire__z0 z4cb_Repairs_z0 z4ce__Limit__z0 z4ca_(Green)_z0 "
  1069.   gc4=gc4"z2cb___Tank__z0 z2cb__Proof__z0 z2cb___Ace___z0 z2cb_Of__Way_z0"
  1070.  
  1071.   a="EL RL 50 RL 75 50 FT 100 AC 50 75 100 100 RL RP SP 50 RP 50 SL 25 ST RL "
  1072.   a=a"200 25 RL ST EL 25 75 75 FT 200 25 RL 25 100 AC GS RL SP 25 50 ET 75 "
  1073.   a=a"RL 50 OG 100 GS 100 RL 100 SP 100 RP RL ST 75 GS PP RP 100 GS 25 DA GS "
  1074.   a=a"SL SP 75 100 50 50 200 SL OG RL SP 100 75 SP EL FT 75 SL RL 25 OG ST "
  1075.   a=a"EL 200 RP 25 RP 50 EL EL ST 75 25 RL RL 100 RW AC GS" ; cards1=a
  1076.   a="75 RL RL 50 SL 25 100 RL AC 25 RL SP 50 RL 75 50 RP AC FT GS ST ST 100 "
  1077.   a=a"OG OG EL GS 100 50 GS GS SL EL RL 75 25 200 50 EL RP SP RP RW PP 200 "
  1078.   a=a"FT EL 100 GS 75 25 100 100 RP 50 RL 75 ST 50 RP 25 RL 25 100 200 25 RL "
  1079.   a=a"100 ET RL 50 RL 200 EL ST SP RL SL 100 RL 75 100 50 DA 25 EL 50 GS 25 "
  1080.   a=a"75 75 RL SP 25 75 100 SP SP RP 75 100" ; cards2=a
  1081.  return
  1082.  
  1083. SETUP2:
  1084.   cp.1="Dan Amiga|1 2 3 4 5 6 7|0|1|2|x"
  1085.   cp.2="Joe Amiga|4 1 2 3 5 6 7|1|2|1|x"
  1086.   cp.3="Ray Amiga|6 4 1 2 3 5 7|2|0|0|x"
  1087.   cp.4="Bev Amiga|1 4 2 3 5 6 7|1|0|1|x"
  1088.   cp.5="Kim Amiga|4 1 6 2 3 5 7|2|1|0|x"
  1089.   cp.6="Pat Amiga|1 4 6 2 3 5 7|0|2|2|x"
  1090.   cpu="2 4 6 5 3 1" ; do i=1 to 6 ; cpu.i=word(cpu,i) ; end i ; cpus=""
  1091.   do 20;i=random(1,6);j=random(1,6);a=cpu.i;cpu.i=cpu.j;cpu.j=a;end
  1092.   do i=1 to 6 ; a=cpu.i ; cpus=cpus||a" "
  1093.     parse var cp.a name.i"|"cpu.i"|"cpu200.i"|"cpuEXT.i"|"cpuAGN.i"|"j
  1094.   end i
  1095.  return
  1096.  
  1097. SHOWHSCORES:
  1098.   tr "f1@4z4ce  CNet Mille Bornes, "ver" last updated "date" by Dotoran of Frontiers BBS  z0"
  1099.   tr bar;tr "CcfC u r r e n t  r1ca  H I G H    H A N D  r0  cfS c o r e sn1"
  1100.   tr "Cc7For cd"players"-Player c7Gamesn1"
  1101.   tr "CcfPoints  caMiles  cbDate/Time Achieved  cePlayer Name(s)";tr bar
  1102.   do i=1 to 10;se "cf"right(scoreH.i,16);parse var scoreHt.i v1 v2 v3 v4
  1103.     tr "ca"right(v1,7)"  cb"v2" "right(v3,8)" ce"v4;end i;tr bar;se prompt
  1104.  return
  1105.  
  1106. SHOWGSCORES:
  1107.   tr "f1@4z4ce  CNet Mille Bornes, "ver" last updated "date" by Dotoran of Frontiers BBS  z0"
  1108.   tr bar;tr "CcfC u r r e n t  r1c9  H I G H    G A M E  r0  cfS c o r e sn1"
  1109.   tr "Cc7For cd"players"-Player c7Gamesn1"
  1110.   tr "CcfPoints  caMiles  cbDate/Time Achieved  cePlayer Name(s)";tr bar
  1111.   do i=1 to 10;se "cf"right(scoreG.i,16);parse var scoreGt.i v1 v2 v3 v4
  1112.     tr "ca"right(v1,7)"  cb"v2" "right(v3,8)" ce"v4;end i;tr bar;se prompt
  1113.  return
  1114.  
  1115. CHECKHSCORES:
  1116.   do i=1 to 10
  1117.     if ht.play>scoreH.i then do ; if breakin=1 then leave i
  1118.       tr "n1cbCongratulationsc7! This is a cdHigh Hand cfScore c7for ce"players"-Player c7games!"
  1119.       do j=10 to i+1 by -1 ; k=j-1 ; scoreH.j=scoreH.k ; scoreHt.j=scoreHt.k ; end j
  1120.       v=date();d=word(v,1)"-"word(v,2)"-"right(word(v,3),2)" "time("c")
  1121.       scoreH.i=ht.play ; ab=wintotal" "d" "name.play ; p=0
  1122.       if players=4 then p=play+2 ; if players=6 then p=play+3
  1123.       if p>0 then ab=ab" c7and ce"name.p ; scoreHt.i=ab ; call SAVEHSCORES
  1124.       call READHSCORES ; leave i ; end
  1125.   end i
  1126.  return
  1127. CHECKGSCORES:
  1128.   do i=1 to 10 
  1129.     if gt.play>scoreG.i then do ; if breakin=1 then leave i
  1130.       tr "n1cbCongratulationsc7! This is a cdHigh Game cfScore c7for ce"players"-Player c7games!"
  1131.       do j=10 to i+1 by -1 ; k=j-1 ; scoreG.j=scoreG.k ; scoreGt.j=scoreGt.k ; end j
  1132.       v=date();d=word(v,1)"-"word(v,2)"-"right(word(v,3),2)" "time("c")
  1133.       scoreG.i=gt.play ; ab=wintotal" "d" "name.play ; p=0
  1134.       if players=4 then p=play+2 ; if players=6 then p=play+3
  1135.       if p>0 then ab=ab" c7and ce"name.p ; scoreGt.i=ab ; call SAVEGSCORES
  1136.       call READGSCORES ; leave i ; end
  1137.   end i
  1138.  return
  1139.  
  1140. READHSCORES:;if ~exists(path"CNetMilles.HiHands"players) then call MAKEHSCORES
  1141.   call open(f1,path"CNetMilles.HiHands"players,"r")
  1142.     do i=1 to 10;y=readln(f1);parse var y scoreH.i" "y;scoreHt.i=strip(y);end i
  1143.   call close(f1)
  1144.  return
  1145. READGSCORES:;if ~exists(path"CNetMilles.HiGames"players) then call MAKEGSCORES
  1146.   call open(f1,path"CNetMilles.HiGames"players,"r")
  1147.     do i=1 to 10;y=readln(f1);parse var y scoreG.i" "y;scoreGt.i=strip(y);end i
  1148.   call close(f1)
  1149.  return
  1150.  
  1151. SAVEHSCORES:
  1152.   call open(f1,path"CNetMilles.HiHands"players,"w")
  1153.     do i=1 to 10;call writeln(f1,scoreH.i" "scoreHt.i);end i
  1154.   call close(f1)
  1155.  return
  1156. SAVEGSCORES:
  1157.   call open(f1,path"CNetMilles.HiGames"players,"w")
  1158.     do i=1 to 10;call writeln(f1,scoreG.i" "scoreGt.i);end i
  1159.   call close(f1)
  1160.  return
  1161.  
  1162. MAKEHSCORES:;scoreH.=0;scoreHt.="700 20-Dec-96 09:16AM No One Yet";call SAVEHSCORES;return
  1163. MAKEGSCORES:;scoreG.=0;scoreGt.="700 20-Dec-96 09:16AM No One Yet";call SAVEGSCORES;return
  1164.  
  1165. TITLE:
  1166.   tr ">7ccÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» "
  1167.   tr ">7ºcf°±²c8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcf²±°ccº "
  1168.   tr ">7ºc8°±²cfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8Ûßßcfßßßc8ßßßcfßßßc8ßßßcfßßßc8ßßßcfßßßc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8²±°ccº "
  1169.   tr ">7ºcf°±²c8ÛÛÛcfÛÛÛc8ÛÛÛ c0z3ßßßßßßß cfÜ   Ü Ü Ü   Ü   ÜÜÜ c0ßßßßßßz0cf ßcfÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛc7²±°ccº "
  1170.   tr ">7ºc8°±²cfÛÛÛc8ÛÛÛcfÛÛÛc0z3Û c9ßÛßßßÜ cfÛßÜßÛ Û Û   Û   ÛÜ  c9ÜßßßßÜ z0 c8ÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8²±°ccº "
  1171.   tr ">7ºcf°±²c8ÛÛÛcfÛÛÛc8ÛÛÛcfz0Üc0z3Û c9Û   Û cfÛ   Û Û Û   Û   Û   c9Û    c0z3ÜÜz0 cfÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛc7²±°ccº "
  1172.   tr ">7ºc8°±²cfÛÛÛc8ÛÛÛcfÛÛÛz0c8Ûc0z3Û c9Û Üß  cfß   ß ß ßßß ßßß ßßß  c9ßÜ  c0z3Ûz0cfßz0c8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8²±°ccº "
  1173.   tr ">7ºcf°±²c8ÛÛÛcfÛÛÛc8ÛÛÛcfÛc0z3Û c9Û  ßÜ  ÜßßÜ ÛßßÜ ÛÜ Û Ûßß    ßÜ c0z3ßz0 cfÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛc7²±°ccº "
  1174.   tr ">7ºc8°±²cfÛÛÛc8ÛÛÛcfÛÛÛc8ßc0z3Û c9Û    Û Û  Û ÛÜÜß Û ßÛ Ûß       Û z0 c8ÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8²±°ccº "
  1175.   tr ">7ºcf°±²c8ÛÛÛcfÛÛÛc8ÛÛÛc0z3Û c9ÜÛÜÜÜÜß ßÜÜß Û  Û Û  Û ÛÜÜ ßÜÜÜÜß z0 cfÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛc7²±°ccº "
  1176.   tr ">7ºc8°±²cfÛÛÛc8ÛÛÛcfÛÛÛ c0z3ÜÜÜÜÜÜÜÜÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛz0c8ÜÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8²±°ccº "
  1177.   tr ">7ºcf°±²c8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛc7²±°ccº "
  1178.   tr ">7ºc8°±²cfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8ÛÛÛcfÛÛÛc8²±°ccº "
  1179.   tr ">7ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ "
  1180.   tr ">7º   cfTHE RACE TO 1000 MILES - Amiga CNet Conversion by Dotoran   ccº "
  1181.   tr ">7ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ " /* ¼ */
  1182.  return
  1183.  
  1184. CHECK:;if ARG() & ARG(1)~="###PANIC" then return ARG(1)
  1185.   getcarrier;if result="TRUE" then if ARG() then return ARG(1);else return
  1186.   logentry "Lost Carrier!!";bufferflush;changewhere oldwhere;exit
  1187. SYNTAX:;ERROR:;IOERR:;e1="n1 Error: "rc" ("errortext(rc)")"
  1188.   e2="  Line: "left(sigl,4)"File:";c="`"fp", "ver"'";e2=e2" "c;tr e1;tr e2
  1189.   logentry e1;logentry e2;e=strip(translate(sourceline(sigl),"\{",""))
  1190.   do while e~="";e3="Source: "left(e,37);tr e3;logentry e3;e=substr(e,38);end
  1191.   bufferflush
  1192. /**************************************************************************\
  1193. \****************************************** Frontiers BBS (716)/823-9892 **/
  1194.